#include <unistd.h>
#include <iostream>
#include "SmartPtr.hpp"

class Widget
{
public:
   Widget()
   {
      std::cout << "Widget()" << std::endl;
   }

   ~Widget()
   {
      std::cout << "~Widget()" << std::endl;
   }
};

int main()
{
   // auto_ptr<Widget>(new Widget());
   // auto_ptr<Widget>(new Widget[10]); //不完全释放 err
   // auto_ptr<int>(new int[10], [](int *p) { delete[] p; });
   // auto_ptr<Widget>(new Widget[10], [](Widget *p) { delete[] p; });
   // auto_ptr<int>(new int);
   // shared_ptr<Widget>(new Widget());
   // shared_ptr<Widget>(new Widget[10]); //不完全释放 err
   // shared_ptr<Widget>(new Widget[10], [](Widget *p) { delete[] p; });
   shared_ptr<Widget> sp1(new Widget());
   {
      shared_ptr<Widget> sp2(new Widget());
      sp2 = sp1;
   }
   sleep(3);
   return 0;
}
